Fork me on GitHub

计算机科学

c语言

1
2
3
4
if (condition || condition)
{
// do this---
}

计算机科学理论

比特

BIT – binary digit

8 BIT – 1 Byte

计算机中数的表示

例如 7 –二进制 以2的幂计算

十进制中 : 1 2 4 8 …

二进制中 : 1 1 1 0 …

即 7 的表示为 0111

硬盘组成

由非常微小的磁性粒子组成,有规定的排列顺序,
就如小磁针,南北指向可以代表比特中的 0 1 ,就由这些磁针来储存数据


C语言

1
2
3
4
5
6
#include <stdio.h>
int
main()
{
printf("Hello,World!\n");
}

字符串

printf输出实例

1
2
3
4
5
6
string name = "keithxodoy";
float num = 5.264

printf("hello,%s!\n", name);
printf("%.2f\n", num);
printf("%d\n", sizeof(i) );

sizeof ==> 输出数据类型的长度

条件语句 conditions

1
2
3
4
5
6
7
8
9
10
11
12
if (condition)
{
// do this
}
else if (condition)
{
/* code */
}
else
{
//code
}
  • “或”、”且” 条件
1
2
3
4
5
6
7
8
9
if (condition || condition)
{
// do this
}

if (condition && condition)
{
//do this
}
  • switch 语句–多重条件,枚举结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch (n)
{
case 1:
case 2:
case 3:
printf("You picked a small number ");
break ;
case 4:
case 5:
case 6:
printf("anothor one%% ");
break ;
default:
printf("the last one ");
}

解释

  1. 当条件情况case 为 1、2、3时,作case3下的操作,再使用 break 中断循环
  2. 使用default处理case以外的情况,可以不使用 break
  3. %% 表示 百分比

循环结构

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <unistd.h>

int
main()
{
for (int i = 0; i <= 5; i++)
{
printf("A test\n");
fflush(stdout);
sleep(2);
}
}

解释

  1. fflush(stdout) : 将循环的进度以类似进度条的形式在一行中显示出来

通信原理

互联网的本质就是一系列的网络协议

两台计算机之间的通信与两个人打电话之间的原理是一样的,可以讲统一的普通话

osi七层协议

互联网协议按照功能不同分为osi七层tcp/ip四层

img

口诀: 应表会运网数物

物理层和数据链路层

物理层

由来:孤立的计算机之间想要一起通信,就必须接入Internet,言外之意就是计算机之间必须完成组网

功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

img

在一个客户端对数据的二进制进行分组,使得电信号变得有意义。

数据链路层

由来:单纯的电信号1和0没有任何意义,必须规定电信号多少位为一组,每组代表什么意思

功能:定义了电信号的分组方式

以太网协议

背景:早期的各个公司都有自己的分组方式,后来形成了统一标准,即以太网协议ethernet

规定

  • 一组电信号构成一个数据包,叫做”帧”
  • 每一数据帧分成:接头head数据data两部分
head (固定18个字节) data(最短46字节,最长1500字节)
发送者/源地址:6字节 包括数据包的具体内容
接收者/目标地址:6字节
数据类型:6字节

head长度 + data长度 = 最短64字节 , 最长1518字节。 超过最大限制就分片发送

mac地址

head中包含的源和目标地址由来:ethernet规定接入的设备都必须具备网卡,发送端和接受端的地址指的是网卡的地址,即mac地址

mac地址
: 每块网卡出厂时都被烧制上一个世界唯一的mac地址(物理地址),长度为48位二进制,通常由12位16进制数表示。其中前六位是厂商编号,后六位是流水线号。

广播

有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另一台主机的mac地址)

ethernet采用最原始的方式–广播的方式进行通信,通俗理解,计算机通信基本靠哄

所有user收到包后,解包后,若mac地址不是指本机,则丢包,而接受的mac地址是本机的,则接受信息

网络层

由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了

问题提出:世界范围内的互联网是由一个个彼此隔离的小局域网组成的,那么如果所有的通信都采用广播的方式,那么一台机器发送的包会被全世界接收到,这样不仅效率低下,而且会导致互联网灾难!!!

IP协议
  • 规定网络地址的协议叫做IP协议,它定义的地址称之为ip地址,广泛采用v4版本,即ipv4(默认网关)。规定了网络地址由32位二进制表示
  • 范围 0.0.0.0 – 255.255.255.255
  • 一个ip地址通常写为四段十进制数,例如:172.16.10.1

ip地址组成部分

  • 网络部分:标识子网
  • 主机部分:标识主机

注意:单纯的ip地址只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网,如:172.16.10.1 与 172.16.10.2 不能确定两者处于同一子网




子网掩码 ip数据包

ip数据包分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分

  • head : 20-60字节
  • data : 最多65515字节

以太网数据包最长只有1500字节,而超出部分,需要分割为几个以太网数据包,分开发送

最终包的格式
以太网头 ip头 ip数据
arp协议
  • 由来:

通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,而获取目标主机的mac,则需要通过arp协议

  • 功能

广播的方式发送数据包,获取目标主机的mac地址

  • 协议工作方式

每台主机的ip都是已知的

一、首先通过ip地址和子网掩码区分出自己所处的子网

二、分析源ip和目标ip是否处于同一网络

三、包会以广播的方式在发送端所处的子网内传播,所有主机接受后拆包,发现目标ip为自己的,就响应,返回自己的mac




理解mac地址与ip地址:mac地址相当于房间号,ip地址相当于所在酒店具体位置


传输层和应用层

传输层

由来:网络层ip帮助用户区分子网,以太网层的mac地址帮用户找到主机,然后用户使用应用程序。而通过ip和mac找到一台特定的主机,此时端口就是用来标识这台主机上的应用程序,应用程序对应窗口。

端口应用程序网卡关联的编号

功能:建立端口之间的通信

补充:端口的范围为0-65535,其中0-1023为系统占用端口

tcp协议

可靠传输,TCP数据包没有长度限制,理论上可以无限长,但为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割

以太网头 IP头 TCP头 数据
udp协议

不可靠传输,”报头”部分一共只有8个字节,总长度不超过65535字节,正好放进一个IP数据包

以太网头 IP头 udp头 数据

应用层

由来:用户使用应用程序,工作于应用层,由于互联网是开放的,大家都可以开发自己的应用程序,数据多种多样,必须要规定好数据的组织形式

功能:规定应用程序的数据格式

示例:

TCP协议可以为各种各样的程序传递数据,例如E-mail、www、FTP等,则必须有不同协议规定电子邮箱、网页、FTP数据的格式

这些应用程序协议就组成了应用层


Socket 编程

网络中的进程是通过socket来通信的,而socket起源于Unix,Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。

可以理socket是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)


FAQ

  • 对硬盘或软盘进行格式化时会发生什么?

解答

不会产生很大改变,对盘进行格式化(分区)只会修改几字节或几千字节的信息,使得电脑无法知道原先的文件或文件夹被存放至哪个位置,但是这些数据仍在原先的位置存储着

  • 编译器作用 ?

解答

将代码文件编译为二进制文件

喜欢的可以对我打赏了哟~